package com.mhb.generator.config;

import com.mhb.generator.config.rules.DateType;
import com.mhb.generator.config.rules.FileType;
import com.mhb.generator.config.rules.TemplateType;
import com.mhb.generator.config.rules.UseViewType;
import com.mhb.generator.util.StringUtil;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 博博
 * @Title: GlobalConfig
 * @time 2019/12/27 0027 8:37
 */
@Data
@Accessors(chain = true)
public class GlobalConfig {

    /**
     * 作者
     */
    private String author = "";

    /**
     * 是否打开输出目录
     */
    private boolean open = true;

    /**
     * 生成文件路径 默认D盘 java
     */
    private String filePath = "D://java//";

    /**
     * 是否生成 service 和 impl
     */
    private boolean isGenerateService = true;

    /**
     * 是否生成mapper
     */
    private boolean isGenerateMapper = true;

    /**
     * 是否生成controller
     */
    private boolean isGenerateController = true;

    /**
     * 是否生成mybatis plus版本的代码
     */
    private boolean isMybatisPlus = true;

    /**
     * 是否生成视图模板
     */
    private boolean isGenerateTemplate = true;

    /**
     * 是否生成基础 resultMap
     */
    private boolean isGenerateBaseResultMap = true;

    /**
     * 是否生成基础SQL
     */
    private boolean isGenerateBaseColumnList = true;

    /**
     * 是否生成基础的 增删改查SQL，批量添加、批量删除
     */
    private boolean isGenerateBaseCRUD = true;

    /**
     * 是否生成 controller CURD方法
     */
    private boolean isControllerCRUD = true;

    /**
     * 是否生成分页方法 service 和 controller 方法 ，需要 pagehelper 依赖
     */
    private boolean isPageMethod = true;

    /**
     * 时间类型
     */
    private DateType DateType = com.mhb.generator.config.rules.DateType.ONLY_DATE;

    /**
     * 获取创建需要的文件
     *
     * @return 文件集合
     */
    public List<FileType> getCreateFile() {
        List<FileType> fileTypes = new ArrayList<>(5);
        fileTypes.add(FileType.ENTITY);
        // mapper
        if (this.isGenerateMapper) {
            fileTypes.add(FileType.MAPPER);
            fileTypes.add(FileType.XML);
        }
        // service impl
        if (this.isGenerateService) {
            fileTypes.add(FileType.SERVICE);
            fileTypes.add(FileType.SERVICE_IMPL);
        }
        // controller
        if (this.isGenerateController) {
            fileTypes.add(FileType.CONTROLLER);
        }
        // view
        if (this.isGenerateTemplate) {
            fileTypes.add(FileType.TEMPLATE);
        }
        return fileTypes;
    }

    public String getFilePath() {
        if (StringUtil.isNull(this.filePath)) {
            filePath = "D://java//";
        }
        return filePath;
    }

}
